
public class Test {
    public static void main(String[] args) {
        // t0和t1等价
        Thread t0 = new Thread() {
            @Override
            public void run() {
                System.out.println("000");
            }
        };
        t0.start();

        Thread t = new MyThread();
        t.start();

        Thread t1 = new Thread(new MyRunnable());
        t1.start();

        // 实现了 Runnable.run() 的匿名实例
        // t2和t3 是等价的
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("333");
            }
        });
        t2.start();

        Thread t3 = new Thread(() -> {
            System.out.println("444");
        });
        t3.start();
    }

}

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("111");
    }
}

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("222");
    }
}

// 必须调用Thread实例的start()方法才能启动新线程，如果我们查看Thread类的源代码，会看到start()方法内部调用了一个private
// native void start0()方法，
// native修饰符表示这个方法是由JVM虚拟机内部的C代码实现的，不是由Java代码实现的